/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ecommerce.entity.impl;

import br.com.ecommerce.entity.IEntity;
import br.com.ecommerce.entity.enums.FlagType;
import java.io.Serializable;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;

/**
 *
 * @author rpateixeira
 */
@Entity
@Table(name="CARTOES_CREDITO")
public class CreditCard implements IEntity,Serializable{

    @Id
    @SequenceGenerator(name = "CARTAO_GENERATOR", sequenceName = "public.cartaoSequence", initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="CARTAO_GENERATOR")
    @Column(name="SEQ_CARD")
    private Long id;
    @NotEmpty
    @NotNull
    @Column(nullable=false,length=50)
    private String numeroCartao;
    @Temporal(TemporalType.DATE)
    @NotNull
    @Column(name="DATA_VALIDADE_CARTAO",nullable=false)
    private Date dataValidade;
    @Column(nullable=false)
    @NotNull
    @NotEmpty
    private String nameOfCardOwner;
    @JoinColumn(name="ID_USUARIO",referencedColumnName="SEQ_USUARIO")
    @ManyToOne(optional=false)
    @Valid
    private Usuario donoCartao;
    @Column(nullable=false,name="TIPO_CARTAO")
    @Enumerated(EnumType.STRING)
    private FlagType FlagType;
    @OneToMany(mappedBy="creditCard",cascade=CascadeType.ALL)
    private List<Venda> vendas;
    @Column(nullable=false)
    @Min(1)
    private Integer quantidadeParcelas;

    @Override
    public Long getId() {
        return this.id;
    }
    public Date getDataValidade() {
        return dataValidade;
    }

    public void setDataValidade(Date dataValidade) {
        this.dataValidade = dataValidade;
    }
    
    public Usuario getDonoCartao() {
        return donoCartao;
    }

    public void setDonoCartao(Usuario donoCartao) {
        this.donoCartao = donoCartao;
    }
   
    public String getNameOfCardOwner() {
        return nameOfCardOwner;
    }

    public void setNameOfCardOwner(String nameOfCardOwner) {
        this.nameOfCardOwner = nameOfCardOwner;
    }
    
    
    public String getNumeroCartao() {
        return numeroCartao;
    }

    public void setNumeroCartao(String numeroCartao) {
        this.numeroCartao = numeroCartao;
    }

   
    public FlagType getFlagType() {
        return FlagType;
    }

    public void setFlagType(FlagType FlagType) {
        this.FlagType = FlagType;
    }

  
    public List<Venda> getVendas() {
        if(vendas==null){
            vendas= new LinkedList<Venda>();
        }
        return vendas;
    }

    public void setVendas(List<Venda> vendas) {
        this.vendas = vendas;
    }

   
    public Integer getQuantidadeParcelas() {
        return quantidadeParcelas;
    }

    public void setQuantidadeParcelas(Integer quantidadeParcelas) {
        this.quantidadeParcelas = quantidadeParcelas;
    }


}
